package main

import (
    
    "log"
    "math/rand"
    "time"
)

const (
    desiredTemperature = 25 // 期望室内温度 (摄氏度)
    defaultDelay      = 30  // 默认延迟时间 (秒)
    minTemperature    = 16  // 最低允许温度 (摄氏度)
    maxTemperature    = 35  // 最高允许温度 (摄氏度)
)

var (
    outdoorTemperature float64 // 室外温度 (摄氏度)
    coolingWaterPumpStatus bool  // 冷却水泵状态
    chilledWaterPumpStatus bool  // 冷冻水泵状态
    hostStatus           bool  // 主机状态
)


func main() {
    // 模拟获取室外温度
    outdoorTemperature = 32.5

    // 检查温度是否满足条件
    if outdoorTemperature >= desiredTemperature && outdoorTemperature <= maxTemperature {
        log.Println("室内温度高于设定温度，启动冷却系统")
        startCoolingSystem(defaultDelay)
    } else if outdoorTemperature < minTemperature {
        log.Println("室内温度低于设定温度，启动加热系统")
        // TODO: Implement heating system logic
    } else {
        log.Println("室内温度舒适，无需调整")
    }

	time.Sleep(100 * time.Second)
}

func startCoolingSystem(delay time.Duration) {
    // 启动冷却水泵
    time.AfterFunc(delay, func() {
        go startCoolingWaterPump()
    })

    // 延迟启动冷冻水泵
    time.AfterFunc(delay+30*time.Second, func() {
        go startChilledWaterPump()
    })

    // 延迟启动主机
    time.AfterFunc(delay+50*time.Second, func() {
        go startHost()
    })

    // 延迟调整温度设定
    time.AfterFunc(delay+60*time.Second, func() {
        go adjustTemperatureSetting()
    })
}

func startCoolingWaterPump() {
    // 模拟开启冷却水泵
    coolingWaterPumpStatus = true
    log.Println("开启冷却水泵")

    // 模拟冷却水泵操作失败
    if randomBool() {
        log.Println("冷却水泵操作失败，回退前序操作")
        coolingWaterPumpStatus = false
        stopChilledWaterPump()
        stopHost()
    }
}

func startChilledWaterPump() {
    // 模拟开启冷冻水泵
    chilledWaterPumpStatus = true
    log.Println("开启冷冻水泵")

    // 模拟冷冻水泵操作失败
    if randomBool() {
        log.Println("冷冻水泵操作失败，回退前序操作")
        chilledWaterPumpStatus = false
        stopHost()
    }
}

func startHost() {
    // 模拟开启主机
    hostStatus = true
    log.Println("开启主机")

    // 模拟主机操作失败
    if randomBool() {
        log.Println("主机操作失败，回退前序操作")
        hostStatus = false
    }
}

func adjustTemperatureSetting() {
    // 模拟调整温度设定
    log.Println("调整温度设定为", desiredTemperature)
}

func stopCoolingWaterPump() {
    // 模拟关闭冷却水泵
    coolingWaterPumpStatus = false
    log.Println("关闭冷却水泵")
}

func stopChilledWaterPump() {
    // 模拟关闭冷冻水泵
    chilledWaterPumpStatus = false
    log.Println("关闭冷冻水泵")
}

func randomBool() bool {
    // 模拟随机布尔值
    return rand.Intn(2) == 1
}


func stopHost(){
	log.Println("关闭主机")
}